/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.ufc.quixada.comandos;

import br.com.ufc.quixada.entidades.Aluguel;
import br.com.ufc.quixada.entidades.Clientes;
import br.com.ufc.quixada.entidades.Exemplar;
import br.com.ufc.quixada.entidades.Filmes;
import br.com.ufc.quixada.interfaces.Comando;
import br.com.ufc.quixada.service.AluguelService;
import br.com.ufc.quixada.service.ExemplarService;
import br.com.ufc.quixada.util.SendMail;
import br.com.ufc.quixada.util.UtilLocExpress;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.mail.MessagingException;
import javax.mail.internet.AddressException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author FuscaoGames
 */
public class CmdAlugar implements Comando {

    public String executa(HttpServletRequest request, HttpServletResponse response) {
        HttpSession session = request.getSession(true);
        String RESULTADO = (String) session.getAttribute("RESULTADO");

        String entrega = request.getParameter("entrega");
        String devolucao = request.getParameter("devolucao");

        int dias = 1;

        System.out.println("Data é: "+entrega);
        System.out.println("Data é: "+devolucao);

        if(!UtilLocExpress.validaDataAluguel(entrega)){
            session.setAttribute("erro", "Data de Entrega inexistente!");
            return "/pedidoCliente.jsp";
        }
        if(!UtilLocExpress.validaDataAluguel(devolucao)){
            session.setAttribute("erro", "Data de Devolução inexistente!");
            return "/pedidoCliente.jsp";
        }

        if(!UtilLocExpress.validaDataEntrega(entrega)){
            session.setAttribute("erro", "Data de Entrega invalida! - Entrega posivel apenas para o proximos 3 dias");
            return "/pedidoCliente.jsp";
        }

        if(!UtilLocExpress.validaDataDevolucao(devolucao, entrega)){
            session.setAttribute("erro", "Data de Devolução invalida! - Devolução posivel apenas para 1 a 10 dias apois a entrega");
            return "/pedidoCliente.jsp";
        }

        dias = UtilLocExpress.calcularDiasDatas(entrega, devolucao);

        Filmes filme = null;
        filme = (Filmes) session.getAttribute("Filme");
        
        Clientes cliente = null;
        cliente = (Clientes) session.getAttribute("user");

        Exemplar exemplar = null;
        exemplar = (Exemplar) session.getAttribute("Exemplar");
        
        ExemplarService es = null;
        try {
            es = new ExemplarService();
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(CmdAlugar.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        Aluguel aluguel = new Aluguel();
        
        aluguel.setCpfcliente(cliente.getCpf());
        aluguel.setCodigodoexeplar(exemplar.getCodigoExemplar());
        aluguel.setDataentrega(entrega);
        aluguel.setDatadevolucao(devolucao);
        aluguel.setValortotal((exemplar.getValor())*dias);
        
        AluguelService as = null;
        try {
            as = new AluguelService();
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(CmdAlugar.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        String to = cliente.getEmail();
        String subject = "Aluguel de Filme - LocExpress";
        String Mensagem = "LocExpress\n--------------\nFilme: "+filme.getTitulo()+"\nMidia: "+exemplar.getMidia()+"\nValor: "+exemplar.getValor()*dias+"\nData Recebimento: "+entrega+"\nData Devolução: "+devolucao+"\n-------------\n";

        exemplar.setReservado(true);

        if (cliente != null) {
            if (as.addAluguel(aluguel) && es.updateExemplar(exemplar)) {
                try {
                    SendMail.sendMail(to, subject, Mensagem);
                } catch (AddressException ex) {
                    Logger.getLogger(CmdAlugar.class.getName()).log(Level.SEVERE, null, ex);
                } catch (MessagingException ex) {
                    Logger.getLogger(CmdAlugar.class.getName()).log(Level.SEVERE, null, ex);
                }
                session.setAttribute("sucesso", "Aluguel Efetuado com Sucesso - Comprovante enviado por email!!");
                return "/home.jsp";
            } else {

                session.setAttribute("erro", "Erro no Aluguel!!");
                return "/login.jsp";
            }
        } else {

            session.setAttribute("erro", "Cliente não Logado!!");
            return "/login.jsp";
        }
    }
}
